package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOMovimientoCuentaBancaria;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioMovimientoCuentaBancaria;
import pe.com.cotelasa.scp.entidad.CajaChica;
import pe.com.cotelasa.scp.entidad.MovimientoCuentaBancaria;

@Service
public class ServicioMovimientoCuentaBancariaImpl implements IServicioMovimientoCuentaBancaria, Serializable {

    private static final long serialVersionUID = -4727188952267726795L;
    @Inject
    private IDAOMovimientoCuentaBancaria daoMovimientoCuentaBancaria;

    @Override
    public Collection<MovimientoCuentaBancaria> listarTodosCheques(int idEmpresa) throws ServiceException {
        try {
            return daoMovimientoCuentaBancaria.listarMovimientosCheques(idEmpresa);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }

    }

    @Override
    public MovimientoCuentaBancaria conseguirMovimientoPorId(Integer idMovCuentaBancaria) throws ServiceException {
        try {
            return daoMovimientoCuentaBancaria.obtenerEntidadPorId(MovimientoCuentaBancaria.class, idMovCuentaBancaria);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public List<MovimientoCuentaBancaria> listarMovimientoCuentaBancaria(
            MovimientoCuentaBancaria beanMovimientoCuentaBancaria, Date fechaInicio, Date fechaFinal) throws ServiceException {
        try {
            return daoMovimientoCuentaBancaria.listarMovimientoCuentaBancaria(beanMovimientoCuentaBancaria,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio actualizarMovCtaBancaria(MovimientoCuentaBancaria movCta) throws ServiceException {

        try {
            daoMovimientoCuentaBancaria.actualizar(movCta);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
        return null;
    }

    @Override
    public void guardar(MovimientoCuentaBancaria beanMovimientoCuentaBancaria)
            throws ServiceException {
        try {
            beanMovimientoCuentaBancaria.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoMovimientoCuentaBancaria.insert(beanMovimientoCuentaBancaria);
        } catch (DAOException e) {
            throw new ServiceException(e);
        }

    }
}
